import java.util.Scanner;

public class day02 {
    /*
    import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a + b);
        }
    }
}

*/




//    题目八:BC8 十六进制转十进制
/*
    BoBo写了一个十六进制整数ABCDEF，他问KiKi对应的十进制整数是多少。

    输入描述：
    无
    输出描述：
    十六进制整数ABCDEF对应的十进制整数，所占域宽为15。
    备注：
    printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。
*/

        public static void main8(String[] args) {
            String s = "ABCDEF";
            System.out.printf("%15d", Integer.parseInt(s, 16));
            // paseInt 将字符串转 xx进制返回 int 类型
        }



// 题目九: BC9 printf的返回值
/*
    描述
    KiKi写了一个输出“Hello world!”的程序，BoBo老师告诉他printf函数有返回值，你能帮他写个程序输出printf(“Hello world!”)的返回值吗？
    输入描述：
    无
    输出描述：
    包括两行：
    第一行为“Hello world!”
    第二行为printf(“Hello world!”)调用后的返回值。
*/

    public static void main9(String[] args) {
        String str = "Hello world!";
        System.out.println(str);
        System.out.println(str.length());
    }



// 题目十: BC11 学生基本信息输入输出

/*
    描述
    依次输入一个学生的学号，以及3科（C语言，数学，英语）成绩，在屏幕上输出该学生的学号，3科成绩
    （注：输出成绩时需进行四舍五入且保留2位小数）。
    数据范围：学号满足 1 \le n \le 20000000 \1≤n≤20000000
    各科成绩使用百分制，且不可能出现负数
    输入描述：
    学号以及3科成绩，学号和成绩之间用英文分号隔开，成绩之间用英文逗号隔开。
    输出描述：
    学号，3科成绩，输出格式详见输出样例。
    示例1
    输入：
    17140216;80.845,90.55,100.00
    复制
    输出：
    The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
    复制
    示例2
    输入：
    123456;93.33,99.99,81.20
    复制
    输出：
    The each subject score of No. 123456 is 93.33, 99.99, 81.20.

*/
    public static void main10(String[] args) {
        Scanner sc = new Scanner(System.in);

        String s = sc.nextLine(); // 将输入转为了字符串.
        // 获取学号
        String student_id = s.substring(0, s.indexOf(";"));
        // 利用分割函数获取分数
        // 使用format函数实现保留两位小数并实现四舍五入
        String[] scores = s.substring( s.indexOf(";") + 1).split(",");
        for (int i = 0; i < scores.length; i++) {
            float fl = Float.parseFloat(scores[i]);
            // 不可以直接对String操作，所以这里转一下float
            scores[i] = String.format("%.2f", fl);
        }
        // 数据修改好，之后重新转成字符串并输出
        String result = String.join(", ", scores);
        System.out.println("The each subject score of No. " + student_id + " is " +
                result + ".");
    }



// 题目十一: BC35 判断字母
/*
  描述
    从键盘任意输入一个字符，编程判断是否是字母（包括大小写）。
    输入描述：
    输入包括一个字符。
    输出描述：
    输出该字符是字母（YES）或不是（NO）。
    示例1
    输入： H
    输出： YES
    示例2
    输入：9
    输出：NO
*/
    public static void main11(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            String ch = scanner.next();
            char c = ch.charAt(0);

            if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')){
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }
        }

    }



// 题目十二:BC12 字符圣诞树
/*
    描述
    输入一个字符，用它构造一个边长为5的三角形圣诞树。
    数据范围：保证输入的字符是一个 char 类型的值
    输入描述：输入只有一行，一个字符。
    输出描述：该字符构成的三角形圣诞树。
    示例1
    输入：1
    输出：
        1
       1 1
      1 1 1
     1 1 1 1
    1 1 1 1 1
*/

    public static void main12(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();  // 获取字符串
        char ch = str.charAt(0);  // 字符串的第一个字符转化为字符存储起来,不转化也是可以的因为
        // 本身就只有一个字符
        // 处理圣诞树的层数
        for (int i = 0; i <= 4; i++) {

            // 处理空格
            for (int j = 4 - i; j > 0; j--) {
                System.out.print(" ");
            }

            // 处理字符
            for (int z = 0; z <= i; z++) {
                System.out.print(ch + " ");
            }

            System.out.println(""); // 换行

        }
    }


        // 题目十三: BC13 ASCII码
        /*
        描述
        BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。
        BoBo出了一个问题给KiKi，转换以下ASCII码为对应字符并输出他们。
        73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33
        输入描述：无
        输出描述：一行输出转换题目中给出的所有ASCII码对应的字符，无需以空格隔开。
        */

        public static void main13(String[] args){
            int[] arr = new int[]{73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
            for(int i = 0; i<arr.length;i++){
                System.out.print(""+(char)arr[i]);  // 数值强制转化为字符类型
            }

        }




// 题目十四:BC14 出生日期输入输出
/*
    描述：
    输入一个人的出生日期（包括年月日），将该生日中的年、月、日分别输出。
    数据范围：年份满足 1990 \le y \le 2015 \1990≤y≤2015 ，月份满足 1 \le m \le 12 \1≤m≤12  ，
    日满足 1 \le d \le 30 \1≤d≤30
    输入描述：
    输入只有一行，出生日期，包括年月日，年月日之间的数字没有分隔符。
    输出描述：
    三行，第一行为出生年份，第二行为出生月份，第三行为出生日期。
    输出时如果月份或天数为1位数，需要在1位数前面补0。
    示例1
    输入：20130225
    输出：
    year=2013
    month=02
    date=25
 */

    public static void main14(String[] args){
        Scanner scanner = new Scanner(System.in);

        String str = scanner.next();
        // substring(x,y) 获取该字符串从0下标开始到4的字符值(不包括4)
        System.out.println("year="+str.substring(0,4));
        System.out.println("month="+str.substring(4,6));
        System.out.println("date="+str.substring(6,8));
    }



    // 题目十五:BC29 2的n次方计算
    /*
    *
    描述
    不使用累计乘法的基础上，通过移位运算（<<）实现2的n次方的计算。
    数据范围：0 \le n \le 31 \0≤n≤31
    输入描述：一行输入整数n（0 <= n < 31）。
    输出描述：输出对应的2的n次方的结果。
    示例1
    输入：2
    输出：4
    示例2
    输入：10
    输出：1024
    */
    public static void main15(String[] args){
        Scanner scanner = new Scanner(System.in); // 实例化对象
        int num = 1;
        int n = scanner.nextInt();

        System.out.println(num << n);

    }



    // 题目十六:BC29 2的n次方计算
/*
    *
    描述
    不使用累计乘法的基础上，通过移位运算（<<）实现2的n次方的计算。
    数据范围：0 \le n \le 31 \0≤n≤31
    输入描述：一行输入整数n（0 <= n < 31）。
    输出描述：输出对应的2的n次方的结果。
    示例1
    输入：2
    输出：4
    示例2
    输入：10
    输出：1024
*/

    public static void main16(String[] args){
        Scanner scanner = new Scanner(System.in);

        String str = scanner.next();

        String[] strs = str.split(","); //字符串以 ,分隔开

        // 取出 strs 数组中第一元素中的第二个字符,从 0 开始
        int a = Integer.parseInt(strs[0].substring(2));
        int b = Integer.parseInt(strs[1].substring(2));

        a = a^b;
        b = a^b;
        a = a^b;

        System.out.println(strs[0].substring(0,1)+"="+a+","+strs[1].substring(0,1)+"="+b);

        // strs[0].substring(0,1) 获取数组中字符串从0开始到1(不包含1)的数值
    }



    // 题目十七: BC16 字符转ASCII码
/*
    描述
    BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储
    。BoBo出了一个问题给KiKi，输入一个字符，输出该字符相应的ASCII码。
    输入描述：一行，一个字符。
    输出描述：一行，输出输入字符对应的ASCII码。
    示例1
    输入：c
    输出：99
*/
    public static void main17(String[] args){
        Scanner scanner = new Scanner(System.in); // 实例化对象

        String str = scanner.next();  // 输入字符串

        char ch = str.charAt(0); // 提取输入str中的第一字符,从0下标开始到0;
        System.out.println((int)ch);  // 字符强制转化为 int类型

    }



    // 题目十八:

/*
    BC18 计算带余除法
    描述
    给定两个整数a和b (0 < a,b < 10,000)，计算a除以b的整数商和余数。
    输入描述：
    一行，包括两个整数a和b，依次为被除数和除数（不为零），中间用空格隔开。
    输出描述：
    一行，包含两个整数，依次为整数商和余数，中间用一个空格隔开。
    示例1
    输入：15 2
    输出：7 1
*/

    public static void main18(String[] args){
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int b = scanner.nextInt(); // 反正是以空格为分隔输入数值

        System.out.println(a/b+" "+a%b);

    }



    // 题目十九:BC17 计算表达式的值
/*
    描述
    请计算表达式“(-8+22)×a-10+c÷2”，其中，a = 40，c = 212。
    输入描述：无。
    输出描述：(-8+22)×a-10+c÷2计算之后的结果，为一个整数。
*/
    public static void main(String[] args){
        int a = 40;
        int c = 212;

        System.out.println((-8+22)*a-10+c/2);
    }
}






